<?php

App::uses('AppController', 'Controller');

/**
 * Turmas Controller
 *
 * @property Turma $Turma
 * @property PaginatorComponent $Paginator
 * @property SessionComponent $Session
 */
class TurmasController extends AppController {

    /**
     * Components
     *
     * @var array
     */
    public $components = array('Paginator', 'Session', 'Utilities');
    public $uses = array('Turma', 'UnidadeEnsino', 'Curso', 'UnidadeEnsinoCurso', 'Disciplina', 'Colaborador', 'DisciplinaTurma', 'CursoDisciplina');

    /**
     * index method
     *
     * @return void
     */
    public function index() {
        $this->Turma->recursive = 2;
        $this->set('turmas', $this->Paginator->paginate());
    }

    /**
     * view method
     *
     * @throws NotFoundException
     * @param string $id
     * @return void
     */
    public function view($id = null) {
        if (!$this->Turma->exists($id)) {
            throw new NotFoundException(__('Turma inválida'));
        }

        $options = array('contain' => array('UnidadeEnsinoCurso' => array('UnidadeEnsino', 'Curso'),
                                            'DisciplinaTurma' => array('Disciplina', 'Colaborador' => array('Pessoa'))),
                                            'conditions' => array('Turma.' . $this->Turma->primaryKey => $id));

//        debug($this->Turma->find('first', $options));die;
        
        $this->set('turma', $this->Turma->find('first', $options));
    }

    /**
     * add method
     *
     * @return void
     */
    public function add() {
        if ($this->request->is('post')) {
            $this->Turma->create();

            $this->prepararDadosTurma();
            
            if ($this->Turma->saveAll($this->request->data)) {
                $this->Session->setFlash(__('Turma salva com sucesso.'));
                return $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('A turma não pôde ser salva. Por favor, tente novamente.'));
            }
        }
        $unidadesEnsino = $this->UnidadeEnsino->find('list', array('conditions' => array('ativa' => 'S')));
        $this->Utilities->adicionarItemChaveVazia($unidadesEnsino, '--Selecione--');

        $cursos = array('--Selecione a Unidade--');

        $this->set(compact('unidadesEnsino', 'cursos'));
    }

    /**
     * edit method
     *
     * @throws NotFoundException
     * @param string $id
     * @return void
     */
    public function edit($id = null) {
        if (!$this->Turma->exists($id)) {
            throw new NotFoundException(__('Turma inválida'));
        }
        if ($this->request->is(array('post', 'put'))) {

            $dataSource = $this->Turma->getDataSource();
            $dataSource->begin();

            $this->prepararDadosTurma();

            if (empty($this->request->data['DisciplinaTurma'])) {
                $sucesso = $this->DisciplinaTurma->deleteAll(array('DisciplinaTurma.turma_id' => $this->request->data['Turma']['id']));
            } else {
                
                $disciplinasTurmaBd = $this->DisciplinaTurma->find('all', array('fields' => array('id'),
                                                                                'conditions' => array('DisciplinaTurma.turma_id' => $this->request->data['Turma']['id'])));
                $disciplinasTurma = array();
                
                if(!empty($disciplinasTurmaBd)){
                    foreach ($disciplinasTurmaBd as $chave => $valor) {
                        $disciplinasTurma[$chave] = $valor['DisciplinaTurma']['id'];
                    }
                }
                
                foreach ($this->request->data['DisciplinaTurma'] as $chave => $valor) {
                    if(!empty($valor['id'])){
                        $chaveChk = array_search($valor['id'], $disciplinasTurma);
                    }
                    if (!empty($chaveChk) && is_numeric($chaveChk)) {
                        unset($disciplinasTurma[$chaveChk]);
                    }
                    
                    $sucesso = true;
                    if(!empty($disciplinasTurma)){
                        $sucesso = $this->DisciplinaTurma->deleteAll($disciplinasTurma);
                    }
                    
                }
            }
            
            if(!$sucesso){
                $dataSource->rollback();
                $this->Session->setFlash(__('A turma não pôde ser alterada. Por favor, tente novamente. aqui'));
            }else if ($this->Turma->saveAll($this->request->data)) {
                $dataSource->commit();
                $this->Session->setFlash(__('Turma alterada com sucesso.'));
                return $this->redirect(array('action' => 'index'));
            } else {
                $dataSource->rollback();
                $this->Session->setFlash(__('A turma não pôde ser alterada. Por favor, tente novamente.'));
            }
        } else {
            $options = array('conditions' => array('Turma.' . $this->Turma->primaryKey => $id),
                'contain' => array('UnidadeEnsinoCurso', 'DisciplinaTurma' => array('Disciplina')));
            $this->request->data = $this->Turma->find('first', $options);

            $this->request->data['UnidadeEnsino']['id'] = $this->request->data['UnidadeEnsinoCurso']['unidade_ensino_id'];
            $this->request->data['Curso']['id'] = $this->request->data['UnidadeEnsinoCurso']['curso_id'];

            $this->Utilities->formatarData($this->request->data['Turma']['data_inicio'], false);
            $this->Utilities->formatarData($this->request->data['Turma']['data_fim'], false);
        }
        $unidadesEnsino = $this->UnidadeEnsino->find('list', array('conditions' => array('ativa' => 'S')));
        $this->Utilities->adicionarItemChaveVazia($unidadesEnsino, '--Selecione--');

        $cursosBD = $this->UnidadeEnsinoCurso->find('all', array('fields' => array('Curso.id', 'Curso.nome'),
            'contain' => array('Curso'),
            'conditions' => array('Curso.ativo' => 'S',
                'UnidadeEnsinoCurso.unidade_ensino_id' => $this->request->data['UnidadeEnsino']['id'])));

        $cursos = array();
        foreach ($cursosBD as $valor) {
            $cursos[$valor['Curso']['id']] = $valor['Curso']['nome'];
        }
        $this->Utilities->adicionarItemChaveVazia($cursos, '--Selecione--');
        
        $cursoDisciplinas = $this->CursoDisciplina->find('all', array('contain' => array('Disciplina'),
                                                                      'conditions' => array('CursoDisciplina.curso_id' => $this->request->data['Curso']['id'])));
        
        foreach($cursoDisciplinas as $chave => $valor){
            foreach($this->request->data['DisciplinaTurma'] as $chaveDT => $valorDT){
                if($valor['Disciplina']['id'] == $valorDT['disciplina_id']){
                    $cursoDisciplinas[$chave]['DisciplinaTurma'] = $this->request->data['DisciplinaTurma'][$chaveDT];
                }
            }
        }
        
        $contain = array('UnidadeEnsino' => array('conditions' => array('UnidadeEnsino.id' => $this->request->data['UnidadeEnsino']['id'])), 'Pessoa');
        $this->Colaborador->recursive = 0;
        $professoresBd = $this->Colaborador->find('all', array('fields' => array('Colaborador.id', 'Pessoa.nome'),
                                                               'contain' => $contain,
                                                               'conditions' => array('Colaborador.ativo' => 'S',
                                                                                     'Colaborador.cargo_id' => 2)));
            
        $professores = array();
        foreach($professoresBd as $chave => $valor){
            $professores[$valor['Colaborador']['id']] = $valor['Pessoa']['nome'];
        }
        $this->Utilities->adicionarItemChaveVazia($professores, '--Selecione--');

        $this->set(compact('unidadesEnsino', 'cursos', 'cursoDisciplinas', 'professores'));
    }

    /**
     * delete method
     *
     * @throws NotFoundException
     * @param string $id
     * @return void
     */
    public function delete($id = null) {
        $this->Turma->id = $id;
        if (!$this->Turma->exists()) {
            throw new NotFoundException(__('Turma inválida'));
        }
        $this->request->allowMethod('post', 'delete');
        if ($this->Turma->delete()) {
            $this->Session->setFlash(__('Turma excluída com sucesso.'));
        } else {
            $this->Session->setFlash(__('A turma não pôde ser excluída. Por favor, tente novamente.'));
        }
        return $this->redirect(array('action' => 'index'));
    }

    private function prepararDadosTurma() {
        $fields = array('id');
        $conditions = array('curso_id' => $this->request->data['Curso']['id'],
            'unidade_ensino_id' => $this->request->data['UnidadeEnsino']['id']);
        $this->UnidadeEnsinoCurso->recursive = -1;
        $unidadeEnsinoId = $this->UnidadeEnsinoCurso->find('first', array('fields' => $fields, 'conditions' => $conditions));

        $this->request->data['Turma']['unidade_ensino_curso_id'] = $unidadeEnsinoId['UnidadeEnsinoCurso']['id'];
        
        $this->Utilities->formatarData($this->request->data['Turma']['data_inicio']);
        $this->Utilities->formatarData($this->request->data['Turma']['data_fim']);
        
        unset($this->request->data['Curso']);
        unset($this->request->data['UnidadeEnsino']);
        
        if(!empty($this->request->data['DisciplinaTurma'])){
            foreach($this->request->data['DisciplinaTurma'] as $chave => $valor){
                if($valor['disciplina_id'] == 0){
                    unset($this->request->data['DisciplinaTurma'][$chave]);
                }
            }
        }
    }

}
